var express = require('express');
var router = express.Router();


//引入封装好的Query方法
const Query = require('../utils/db.js')
//引入模块，并使用了简写方式的解构赋值
const { API_URL } = require('../utils/config.js')

//引入time-stamp模块，为了生成时间格式 ：  '年月日时分秒+6位随机数'
const timeStamp = require('time-stamp')

/* GET home page. */
router.get('/demo1', function (req, res, next) {
  res.send('这是我们的详情页模块')
});

//这是我们详情页

//1.课程接口 按照cid获取课程 。获取1条课程
router.get('/course', async (req, res, next) => {
  let data = {}
  // console.log(req.query);
  // let id = '1beec178-4b02-40fb-9d1c-8aa61cd4a097' //课程的唯一标识
  let id =  req.query.id //课程的唯一标识
  //1. 定义sql 课程的sql
  let sql1 = `SELECT *,CONCAT('${API_URL}/uploads/courses/',image_src) AS image_src FROM e_course WHERE cid='${id}'` //课程

  //此时的视频sql语句不返回视频的src地址，我们有一个单独的视频接口，并且我们要求只有登录才能观看视频。
  let sql3 = `SELECT id,cid,vnum,video_title FROM e_video WHERE cid='${id}'` //视频

  //2. 使用引入的Query执行sql 
  let { err: err1, result: result1 } = await Query(sql1)
  let { err: err3, result: result3 } = await Query(sql3)
  
  if (err1 || err3) {
    data = {
      msg: '稍后再试sql1和3',
      status: 500,
    }
    res.send(data)
    return
  }

  let tid = result1[0].tid
  //定义老师的sql
  let sql2 = `SELECT *,CONCAT('${API_URL}/uploads/avatars/',head_photo_url) AS head_photo_url FROM e_teacher WHERE tid='${tid}'`
  let { err: err2, result: result2 } = await Query(sql2)

  // res.send( err )
  if (err2) {
    data = {
      msg: '稍后再试sql2',
      status: 500,
    }
    res.send(data)
    return
  }

  data = {
    msg: 'OK',
    status: 200,
    result: {
      teacher: result2[0],
      course: result1[0],
      videos: result3
    }
  }
  res.send(data)
});


//2. 获取视频： 应该放到个人中心里面的。 
//根据视频id，获取某一个视频信息
router.get('/video', async (req, res, next) => {
  let data = {}
  let { id = '' } = req.query

  if (!Number(id)) { //代表传递的不是个数字
    data = {
      "msg": "请传递必要参数",
      "status": 500
    }
    res.send(data)
    return
  }

  //1. 定义sql
  let sql = `SELECT id,cid,vnum,CONCAT('${API_URL}/uploads/videos/',video_src) AS video_src,video_title FROM e_video WHERE id=${id}`
  //2. 使用引入的Query执行sql
  let { err, result } = await Query(sql)
  // res.send( err )
  // return
  if (err) {
    data = {
      msg: '稍后再试',
      status: 500,
    }
    res.send(data)
    return
  }

  data = {
    msg: 'OK',
    status: 200,
    result: result[0]
  }
  res.send(data)
});

//3. 报名接口
//谁都可以报同一个课程，谁都可以报任意课程
//一个课程对于一个用户来说只能报一次。
router.post('/study', async (req, res, next) => {
  let data = {}

  // let mid = '000m2' //用户标识
  // let cid = '000c2'//课程标识
  let { mid = '', cid = '' } = req.body
  //以上两个变量是前端传递过来的

  if (mid == '' || cid == '') {
    data = {
      msg: '请传递必要参数',
      status: 500,
    }
    res.send(data)
    return
  }

  let createdate = Date.now()  //new Date().getTime()
  let status = 1 //无问题的订单
  let oid = timeStamp('YYYYMMDDHHmmss') + (Math.random() + '').substring(2, 8)

  //0. 定义此用户有无报名此课程的sql
  let sql2 = `SELECT * FROM e_order WHERE mid='${mid}' AND cid='${cid}'`
  let { err: err2, result: result2 } = await Query(sql2)
  if (err2) {
    data = {
      msg: '稍后再试',
      status: 500,
    }
    res.send(data)
    return
  }

  if( result2.length > 0 ){
    data = {
      msg: '已经报名此课程',
      status: 500,
    }
    res.send(data)
    return
  }


  //1. 定义sql
  let sql = `INSERT INTO e_order ( oid,cid,mid,createdate,status ) VALUES ( '${oid}','${cid}','${mid}','${createdate}',${status} )`

  // res.send(sql)
  // return

  //2. 使用引入的Query执行sql
  let { err, result } = await Query(sql)
  // res.send( result )
  // return
  if (err || result.affectedRows == 0) { //如果为0代表没有添加进行
    data = {
      msg: '稍后再试',
      status: 500,
    }
    res.send(data)
    return
  }

  //只有查询select才会返回result，其它insert delete update我们不返回result
  data = {
    msg: 'OK',
    status: 200
  }
  res.send(data)
});

module.exports = router;
